package com.jctrip.hotel.source.model.elong.resp.offline;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Author: zxy
 * @CreateTime: 2023-09-19 17:45
 * @Description:
 */
@Data
public class ElongValidateResp implements Serializable {
    @JsonProperty("ResultCode")
    private String ResultCode;

    @JsonProperty("ErrorMessage")
    private String ErrorMessage;

    @JsonProperty("GuaranteeRate")
    private BigDecimal GuaranteeRate;

    @JsonProperty("CurrencyCode")
    private String CurrencyCode;

    @JsonProperty("CancelTime")
    private Date CancelTime;

    @JsonProperty("FreeCancelTime")
    private Date FreeCancelTime;

    @JsonProperty("PenaltyAmount")
    private BigDecimal PenaltyAmount;

    @JsonProperty("IntegererValidateInfo")
    private InterValidateInfo IntegererValidateInfo;

    @Data
    public static class InterValidateInfo implements Serializable {
        @JsonProperty("orderHotel")
        private OrderHotel orderHotel;

        @JsonProperty("ratePlanInfo")
        private RatePlanInfo ratePlanInfo;
    }

    @Data
    public static class OrderHotel implements Serializable {
        @JsonProperty("HotelId")
        private String hotelId;

        @JsonProperty("Name")
        private String name;

        @JsonProperty("HotelEnglishName")
        private String hotelEnglishName;

        @JsonProperty("Address")
        private String address;

        @JsonProperty("AddressEn")
        private String addressEn;

        @JsonProperty("Phone")
        private String phone;

        @JsonProperty("CityName")
        private String cityName;

        @JsonProperty("HotelCountryName")
        private String hotelCountryName;

        @JsonProperty("HotelCountryId")
        private String hotelCountryId;

        @JsonProperty("HotelLatitude")
        private String hotelLatitude;

        @JsonProperty("HotelLongitude")
        private String hotelLongitude;

        @JsonProperty("CityId")
        private String cityId;

        @JsonProperty("Star")
        private Integer star;
    }

    @Data
    public static class RatePlanInfo implements Serializable {
        @JsonProperty("ConfirmType")
        private Integer confirmType;

        @JsonProperty("CancelName")
        private String cancelName;

        @JsonProperty("CancelDescription")
        private String cancelDescription;

        @JsonProperty("RateNightlyRateList")
        private List<RoomRateNightlyRate> rateNightlyRateList;

        @JsonProperty("CancelPolicyList")
        private List<CancelPolicy> cancelPolicyList;

        @JsonProperty("OccupancyPerRoom")
        private Integer occupancyPerRoom;

        @JsonProperty("AdultPerRoom")
        private Integer adultPerRoom;

        @JsonProperty("ChildPerRoom")
        private Integer childPerRoom;

        @JsonProperty("RoomChildAge")
        private Integer roomChildAge;

        @JsonProperty("RoomDescription")
        private String roomDescription;

        @JsonProperty("CheckInInstructions")
        private String checkInInstructions;

        @JsonProperty("SmokingPreferences")
        private String smokingPreferences;

        @JsonProperty("RestInventoryCount")
        private String restInventoryCount;

        @JsonProperty("ExtraPersonFee")
        private BigDecimal extraPersonFee;

        @JsonProperty("ExtraPersonFeeRMB")
        private BigDecimal extraPersonFeeRMB;

        @JsonProperty("InterBedGroups")
        private List<InterBedGroup> IntegererBedGroups;

        @JsonProperty("AdditionalTax")
        private AdditionalTax additionalTax;
    }

    @Data
    public static class RoomRateNightlyRate implements Serializable {
        @JsonProperty("Rate")
        private BigDecimal rate;

        @JsonProperty("MinRate")
        private BigDecimal minRate;

        @JsonProperty("Date")
        private Date date;
    }

    @Data
    public static class CancelPolicy implements Serializable {
        @JsonProperty("Penalty")
        @ApiModelProperty(value = "罚金")
        private BigDecimal penalty;

        @JsonProperty("PenaltyRMB")
        @ApiModelProperty(value = "罚金(人民币)")
        private BigDecimal penaltyRMB;

        @JsonProperty("DateFrom")
        @ApiModelProperty(value = "取消开始时间")
        private Date dateFrom;

        @JsonProperty("DateTo")
        @ApiModelProperty(value = "取消结束时间")
        private Date dateTo;
    }

    @Data
    public static class InterBedGroup implements Serializable {
        @JsonProperty("BedGroupId")
        @ApiModelProperty(value = "床型信息id")
        private String bedGroupId;

        @JsonProperty("BedGroupDesc")
        @ApiModelProperty(value = "床型信息描述")
        private String bedGroupDesc;

        @JsonProperty("BedTypes")
        @ApiModelProperty(value = "床类型集合")
        private List<BedType> bedTypes;
    }
    
    @Data
    public static class BedType implements Serializable {
        @JsonProperty("BedTypeId")
        @ApiModelProperty(value = "床类型id")
        private String bedTypeId;

        @JsonProperty("BedTypeName")
        @ApiModelProperty(value = "床类型名称")
        private String bedTypeName;

        @JsonProperty("BedType")
        @ApiModelProperty(value = "床类型")
        private String bedType;

        @JsonProperty("Count")
        @ApiModelProperty(value = "床数")
        private Integer count;

        @JsonProperty("Size")
        @ApiModelProperty(value = "床大小")
        private String size;
    }

    @Data
    public static class AdditionalTax implements Serializable {
        @JsonProperty("TotalAmountRmb")
        @ApiModelProperty(value = "另付税和服务费总额")
        private BigDecimal totalAmountRmb;

        @JsonProperty("AdditionalTaxItems")
        @ApiModelProperty(value = "另付税和服务费明细")
        private List<AdditionalTaxItem> additionalTaxItems;
    }

    @Data
    public static class AdditionalTaxItem implements Serializable {
        @JsonProperty("Description")
        @ApiModelProperty(value = "另付税和服务费明细描述")
        private String description;

        @JsonProperty("Amount")
        @ApiModelProperty(value = "另付税和服务费明细金额")
        private BigDecimal amount;
    }
}
